package rmi;

import interfaz.TDAOficinaDeVenta;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
import java.util.List;

import beans.ClienteBean;
import beans.CotizacionBean;
import beans.FacturaBean;
import beans.ItemCotizacionBean;
import beans.ItemFacturaBean;
import beans.ItemPedidoVentaBean;
import beans.ListaPreciosBean;
import beans.OrdenCompraBean;
import beans.PedidoVentaBean;
import beans.UsuarioBean;

import entities.ClienteEntity;
import entities.CotizacionEntity;
import entities.FacturaEntity;
import entities.ItemCotizacionEntity;
import entities.PedidoVentaEntity;

import srv.ClienteSRV;
import srv.CotizacionSRV;
import srv.FacturaSRV;
import srv.ItemCotizacionSRV;
import srv.PedidoVentaSRV;


public class OficinaVenta extends UnicastRemoteObject implements TDAOficinaDeVenta
{
	private static final long serialVersionUID = 1L;
	private int id;
	
	public OficinaVenta() throws RemoteException 
	{
		super();
	}
		
	public void generarCotizacion( CotizacionBean nuevaCotizacion ) throws RemoteException
	{
		CotizacionEntity nuevaCotizacionEntity = CotizacionSRV.getInstancia().pasadoDesdeBean( nuevaCotizacion );
		CotizacionSRV.getInstancia().registrarCotizacion( nuevaCotizacionEntity );
	}
	
	public boolean haySuficienteStock( ItemCotizacionBean item ) throws RemoteException
	{
		ItemCotizacionEntity itemEntity = ItemCotizacionSRV.getInstancia().pasadoDesdeBean( item );
		return ItemCotizacionSRV.getInstancia().haySuficienteStock( itemEntity );	
	}
	
	public boolean procesarPedidoVenta( PedidoVentaBean p ) throws RemoteException
	{
		PedidoVentaEntity pEntity = PedidoVentaSRV.getInstancia().pasadoDesdeBean( p );
		
		if(PedidoVentaSRV.getInstancia().grabarPedidoVenta( pEntity ) != 0)
		{
			return true;
		}
		return false;	
	}
	
	public void agregarCliente( ClienteBean nuevoCliente ) throws RemoteException
	{
		ClienteEntity nuevoClienteEntity = ClienteSRV.getInstancia().pasadoDesdeBean( nuevoCliente );
		ClienteSRV.getInstancia().grabarCliente( nuevoClienteEntity );
	}
		
	public void bajaCliente( ClienteBean cliente ) throws RemoteException
	{
		ClienteEntity clienteEntity = ClienteSRV.getInstancia().pasadoDesdeBean( cliente );
		ClienteSRV.getInstancia().eliminarCliente( clienteEntity );
	}
	
	public void modificarCliente( ClienteBean cliente ) throws RemoteException
	{
		ClienteEntity clienteEntity = ClienteSRV.getInstancia().pasadoDesdeBean( cliente );
		ClienteSRV.getInstancia().modificarCliente( clienteEntity );
	}
	
	public ClienteBean getClientePorCuit(String cuit) throws RemoteException {
		ClienteBean clienteBean = new ClienteBean();
		try {
			ClienteEntity cliente = ClienteSRV.getInstancia().obtenerClientePorCUIT(cuit);
			clienteBean.setId(cliente.getId());
			clienteBean.setCuit(cliente.getCuit());
			clienteBean.setNombreEmpresa(cliente.getNombreEmpresa());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return clienteBean; 
	}
	
	@SuppressWarnings("null")
	public FacturaBean generarFactura( PedidoVentaBean p, String tipoFactura, String condVenta ) throws RemoteException
	{
		FacturaBean nuevaFactura = new FacturaBean();
		
		//armo la factura con los datos del pedido de Venta
		nuevaFactura.setClienteDestinatatio( p.getCliente() );
		
		//chequeo el tipo de factura. Caso contrario, seteo el tipo de factura por defecto del cliente.
		if( tipoFactura != "")
		{	
			nuevaFactura.setTipoFactura( tipoFactura );
		}
		else
		{
			nuevaFactura.setTipoFactura( nuevaFactura.getClienteDestinatatio().getTipoDeFacturaPorDefecto() );
		}
		
		nuevaFactura.setFecha(new Date());
		nuevaFactura.setIngBrutos( nuevaFactura.getClienteDestinatatio().getIngresosBrutos() );
		nuevaFactura.setInicioActividades( nuevaFactura.getClienteDestinatatio().getInicioActividades() );
		nuevaFactura.setCuit( nuevaFactura.getClienteDestinatatio().getCuit() );
		nuevaFactura.setIvaResponsableInscripto( nuevaFactura.getClienteDestinatatio().isIvaResponsableInscriptoPorDefecto() );
		nuevaFactura.setCondicionVenta( condVenta );
		
		List<ItemPedidoVentaBean> itemsPv = p.getItems();
		List<ItemFacturaBean> itemsFactura = null;
		ItemFacturaBean itemFactura = new ItemFacturaBean();
		
		for( int i = 0; i < itemsPv.size(); i++ )
		{
			itemFactura.setRodamiento( itemsPv.get( i ).getRodamiento() );
			itemFactura.setPrecio( itemsPv.get( i ).getPrecio() );
			itemFactura.setCantidad( itemsPv.get( i ).getCantidad() );
			//ver si se agrega la lista de precios o no
			
			itemsFactura.add( itemFactura );
		}
		
		nuevaFactura.setItems( itemsFactura );
		
		//guardo la factura en la base de datos.
		FacturaEntity nuevaFacturaEntity = FacturaSRV.getInstancia().pasadoDesdeBean( nuevaFactura );
		FacturaSRV.getInstancia().registrarFactura( nuevaFacturaEntity );
		
		return nuevaFactura;
	}

	public int getId() throws RemoteException
	{
		return id;
	}

	public void setId(int id) throws RemoteException
	{
		this.id = id;
	}
	
	public boolean aprobarCotizacion( CotizacionBean cotizacion) throws RemoteException
	{
		CotizacionEntity cotizacionEntity = CotizacionSRV.getInstancia().pasadoDesdeBean(cotizacion);
		return CotizacionSRV.getInstancia().aprobarCotizacion( cotizacionEntity );	
	}

	@Override
	public ClienteBean buscarClientePorCuit(String cuit) throws RemoteException //falta 
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ClienteBean> obtenerClientesPorCriterio(String razonSocial, String cuit) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<CotizacionBean> obtenerCotizacionPorCliente(String CuitCliente) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CotizacionBean generarComparativaPrecios(int IdCotizacion) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public OrdenCompraBean generarOrdenCompra(CotizacionBean cot) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public UsuarioBean loginUsuario(UsuarioBean usuario) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean cargarListaPrecios(ListaPreciosBean lista) throws RemoteException //falta
	{
		// TODO Auto-generated method stub
		return false;
	}
}
